package com.ruoyi.kanban.domain;

import java.math.BigDecimal;
import java.util.Date;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;

import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 送货单对象 delivery_order
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("delivery_order")
public class DeliveryOrder extends BaseEntity {

    // 备注字段在当前 delivery_order 表中不存在，避免默认 SELECT 引用导致 SQL 错误
    @TableField(exist = false)
    private String remark;

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /** 送货单编号 */
    @Excel(name = "送货单编号")
    @TableField("delivery_code")
    private String deliveryCode;

    /** 送货组ID(批量发货标识) */
    @TableField("delivery_group_id")
    private String deliveryGroupId;

    /** 对应要货看板ID */
    @TableField("kanban_id")
    private Long kanbanId;

    /** 对应要货看板编码 */
    @Excel(name = "看板编码")
    @TableField("kanban_code")
    private String kanbanCode;

    /** 对应框架ID */
    @TableField("framework_id")
    private Long frameworkId;

    /** 对应框架编码 */
    @Excel(name = "框架编码")
    @TableField("framework_code")
    private String frameworkCode;

    /** 收货公司ID */
    @TableField("receiver_company_id")
    private Long receiverCompanyId;

    /** 收货公司名称 */
    @Excel(name = "收货公司")
    @TableField("receiver_company_name")
    private String receiverCompanyName;

    /** 发货公司ID */
    @TableField("sender_company_id")
    private Long senderCompanyId;

    /** 发货公司名称 */
    @Excel(name = "发货公司")
    @TableField("sender_company_name")
    private String senderCompanyName;

    /** 收货库房ID */
    @TableField("receiver_warehouse_id")
    private String receiverWarehouseId;

    /** 发货库房ID */
    @TableField("sender_warehouse_id")
    private String senderWarehouseId;

    /** 收货库房名称 */
    @Excel(name = "收货库房")
    @TableField("receiver_warehouse")
    private String receiverWarehouse;

    /** 发货库房名称 */
    @Excel(name = "发货库房")
    @TableField("sender_warehouse")
    private String senderWarehouse;

    /** 收货联系人 */
    @TableField("receiver_contact")
    private String receiverContact;

    /** 收货联系电话 */
    @TableField("receiver_phone")
    private String receiverPhone;

    /** 发货联系人 */
    @TableField("sender_contact")
    private String senderContact;

    /** 发货联系电话 */
    @TableField("sender_phone")
    private String senderPhone;

    /** 物料编码 */
    @Excel(name = "物料编码")
    @TableField("material_code")
    private String materialCode;

    /** 物料名称 */
    @Excel(name = "物料名称")
    @TableField("material_name")
    private String materialName;

    /** 计量单位 */
    @Excel(name = "计量单位")
    @TableField("material_unit")
    private String materialUnit;

    /** 包装型号 */
    @Excel(name = "包装型号")
    @TableField("package_type")
    private String packageType;

    /** 包装容量数 */
    @Excel(name = "包装容量")
    @TableField("package_capacity")
    private BigDecimal packageCapacity;

    /** 对应箱标编码 */
    @TableField("box_label_code")
    private String boxLabelCode;

    /** 实际发货数量 */
    @Excel(name = "实际发货数量")
    @TableField("actual_delivery_qty")
    private BigDecimal actualDeliveryQty;

    /** 不含税单价 */
    @Excel(name = "单价")
    @TableField("unit_price")
    private BigDecimal unitPrice;

    /** 税率 */
    @Excel(name = "税率")
    @TableField("tax_rate")
    private BigDecimal taxRate;

    /** 要求到货时间 */
    @Excel(name = "要求到货时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("required_delivery_time")
    private Date requiredDeliveryTime;

    /** 计划发货时间 */
    @Excel(name = "计划发货时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("planned_delivery_time")
    private Date plannedDeliveryTime;

    /** 实际发货时间 */
    @Excel(name = "实际发货时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("actual_delivery_time")
    private Date actualDeliveryTime;

    /** 对应运单ID（数据库为 varchar，使用字符串映射） */
    @TableField("transport_id")
    private String transportId;

    /** 状态(10草稿20已发货30已收货-10已作废) */
    @TableField("status")
    private Integer status;

    /** 异常标志(0正常1异常) */
    @TableField("exception_flag")
    private Integer exceptionFlag;

    /** 异常类型(1数量差异2质量问题3时间延误4其他) */
    @TableField("exception_type")
    private Integer exceptionType;

    /** 异常描述 */
    @TableField("exception_description")
    private String exceptionDescription;

    /** 通知id */
    @TableField("notification_id")
    private Integer notificationId;

    /** 删除标志(0正常1删除) */
    @TableField("del_flag")
    private Integer delFlag;
}